package mb;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import persistence.DireccionClienteNoReg;

import bean.ClienteFinBean;
import bean.DireccionClienteFinBean;
import bean.DireccionClienteNoRegBean;

import model.ManClienteNoRegBeanModel;
import model.ManDireccionClienteFinModel;
import model.GeneralModel;
import model.ManClienteFinModel;
import model.ManDireccionClienteNoRegModel;

import util.Constant;


@ManagedBean(name="manClienteFinMB")
@SessionScoped
public class ManClienteFinMB {
	
	
	public ManDireccionClienteFinModel direccionClienteFinModel = new ManDireccionClienteFinModel();
	public ArrayList<ClienteFinBean> listClienteFins;
	public ClienteFinBean clienteFins;
	public DireccionClienteFinBean dirCienteFins;
	public DireccionClienteNoRegBean direccionCliNoRegBean;
	public String mensaje;
	public Map<String,String> departamentos = new HashMap<String, String>();
	public Map<String,String> provincias = new HashMap<String, String>();
	public Map<String,String> distritos = new HashMap<String, String>();
	public Map<String,String> tipoDocIdent = new HashMap<String, String>();
	public Map<String,String> vias = new HashMap<String, String>();
	public Map<String,String> codigoIntDir = new HashMap<String, String>();
	public Boolean flagDireccion=false;
	private String IDE_CLI="";
	private Integer SEC_DIR=0;
	
	public Integer COD_TIP_DOC_IDE;
	public String NUM_DOC_IDE;	
	public String NOM_RAZ_SOC;
	public String NOMBRE_COMPLETO;
	public Integer totalRegistros;
	public Boolean visibleDialog;
	public String popUp;
	public Boolean edit;
	
	
	public ManClienteFinMB(){
		ManClienteFinModel clienteFinModel= new ManClienteFinModel();
		try {
			listClienteFins = clienteFinModel.listarClienteFin();
			totalRegistros = listClienteFins.size();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void cargarParametros(){
		try {
			ManClienteFinModel clienteFinModel= new ManClienteFinModel();
			listClienteFins = clienteFinModel.listarClienteFin();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		
	public String mostrar(){
		String path=null;
		ManClienteFinModel clienteFinModel= new ManClienteFinModel();
		try {
			
			if (clienteFins!=null){
				clienteFins.setListDirCliFin(direccionClienteFinModel.listarDireccionClienteFin(clienteFins.getIDE_CLI()));
				
				if (!clienteFins.getListDirCliFin().isEmpty()){				
					dirCienteFins = clienteFins.getListDirCliFin()!=null ? clienteFins.getListDirCliFin().get(0) : null;
				}
				cargarDepartamentos();
				cargarProvincias();
				cargarDistritos();
				cargarTipoDocumento();
				cargarVia();
				cargarCodigoIntDir();
				flagDireccion = true;
				edit = true;
				path = Constant.EDIT_CLIENTE_FIN;				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return path;
	}
		
	public String nuevo(){
		try {
			clienteFins = new ClienteFinBean();
			dirCienteFins = new DireccionClienteFinBean();
			cargarTipoDocumento();
			edit = false;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return Constant.EDIT_CLIENTE_FIN;
	}
	
	public String eliminarCliente(){
		ManClienteNoRegBeanModel clienteNoRegBeanModel = new ManClienteNoRegBeanModel();
		ManDireccionClienteNoRegModel clienteNoRegModel= new ManDireccionClienteNoRegModel();
		ManClienteFinModel clienteFinModel = new ManClienteFinModel();
		try {
			
			if (IDE_CLI.trim()!=null){
				clienteNoRegModel.eliminarDirsCliente(Integer.parseInt(IDE_CLI));
				clienteNoRegBeanModel.eliminarClienteNoReg(Integer.parseInt(IDE_CLI));				
				listClienteFins = clienteFinModel.listarClienteFin();
				FacesContext.getCurrentInstance().addMessage(null,
						new FacesMessage(FacesMessage.SEVERITY_INFO,
						"", Constant.MENSAJE_OK ));
			}			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return Constant.LIST_CLIENTE_FIN;
	}
	
	public void eliminarDireccion(){
		ManDireccionClienteFinModel direccionClienteFinModel= new ManDireccionClienteFinModel();
		try {
			
			if (SEC_DIR!=null){
				direccionClienteFinModel.eliminarDireccionClienteFin(SEC_DIR);
				clienteFins.setListDirCliFin(direccionClienteFinModel.
						listarDireccionClienteFin(clienteFins.getIDE_CLI()));
			}			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	
	public String nuevaDireccion(){
		try {
			dirCienteFins =  new DireccionClienteFinBean();
			mensaje = "";
			popUp = "";
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return Constant.EDIT_CLIENTE_FIN;
	}
	
	public String editarDireccion(){
		try {
			if (!"".equals(SEC_DIR) && SEC_DIR!=null){
				for (DireccionClienteFinBean bean : clienteFins.getListDirCliFin()) {
					if (SEC_DIR.equals(bean.getSEC_DIR())){
						if(bean.getFLG_DIR_PPL()!=null
								&& !"".equals(bean.getFLG_DIR_PPL()) ){
							bean.setFlagDireccion(
							"S".equalsIgnoreCase(bean.getFLG_DIR_PPL())?true:false);
						}else{
							bean.setFlagDireccion(false);
						}
						setDirCienteFins(bean);
						break;
					}					
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return Constant.EDIT_CLIENTE_FIN;
	}
	
	public String cancelar(){
		try {
			clienteFins = new ClienteFinBean();						
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return Constant.LIST_CLIENTE_FIN;
	}
			
	public String guardarCliente(){
		String path = null;
		try {
			
			if(clienteFins!=null){
								
				ManClienteFinModel clienteFinModel= new ManClienteFinModel();
				
				clienteFins.setUSERID_UMO("prueba1");
				clienteFins.setTIMEST_UMO("16/06/11");
				clienteFins.setCOD_NAT_CLI(1);
				
				if(!"0".equals(clienteFins.getIDE_CLI())&& clienteFins.getIDE_CLI()!=null) {
					
					clienteFinModel.editarClienteFin(clienteFins);
										
				}else{				
					
					clienteFinModel.guardarClienteFin(clienteFins);
					
				}

				listClienteFins = clienteFinModel.listarClienteFin();
				
				path=Constant.LIST_CLIENTE_FIN;
			}
			
			mensaje = Constant.MENSAJE_OK;
			
		} catch (Exception e) {
			mensaje = Constant.MENSAJE_ERROR;
			path = null;
			e.printStackTrace();
		}
		return path;
	}
	
	public void guardarDireccion(){
		
		String  path=null;
		
		try {
			
			if(dirCienteFins!=null){
				
				if ("".equals(dirCienteFins.getDSC_DIR()) || dirCienteFins.getDSC_DIR()==null ||
					"".equals(dirCienteFins.getDSC_REF_DIR()) || dirCienteFins.getDSC_REF_DIR()==null ){
					
				   mensaje = "* Campos Obligatorios";
				   visibleDialog  = true;
				   popUp = "FrmDireccion.show();";
					
				}else {
							
					ManDireccionClienteFinModel direccionClienteFinModel = new ManDireccionClienteFinModel();
					
					//Seteando Los valores de ssesion
					dirCienteFins.setIDE_CLI(clienteFins.getIDE_CLI());
					
					dirCienteFins.setUSERID_UMO("prueba1");
					
					dirCienteFins.setTIMEST_UMO(new SimpleDateFormat("dd/MM/yyyy").format(new Date()));
					
					dirCienteFins.setCOD_TIP_DIR(1);
					
					dirCienteFins.setFLG_DIR_PPL(dirCienteFins.getFlagDireccion()? "S" : "N");
					
					if ("S".equalsIgnoreCase((dirCienteFins.getFLG_DIR_PPL()))){
						for (DireccionClienteFinBean bean: clienteFins.getListDirCliFin() ){							
							if ("S".equalsIgnoreCase((bean.getFLG_DIR_PPL()))){
								bean.setFLG_DIR_PPL("N");
								bean.setTIMEST_UMO(new SimpleDateFormat("dd/MM/yyyy").format(new Date()));
								direccionClienteFinModel.editarDireccionClienteFin(bean);
							}							
						}
					}
					
					if (dirCienteFins.getSEC_DIR()!=null && dirCienteFins.getSEC_DIR()!=0){
						
						direccionClienteFinModel.editarDireccionClienteFin(dirCienteFins);
						
					}else {					
						
						direccionClienteFinModel.guardarDireccionClienteFin(dirCienteFins);
												
					}
					
					clienteFins.setListDirCliFin(direccionClienteFinModel.listarDireccionClienteFin(clienteFins.getIDE_CLI().intValue()));
					visibleDialog = false;
					dirCienteFins = new DireccionClienteFinBean();
					popUp = "FrmDireccion.hide();";
				}
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void cargarDepartamentos(){
		GeneralModel generalModel = new GeneralModel();
		departamentos = generalModel.listarDepa();
	}
	
	public void cargarVia(){
		GeneralModel generalModel = new GeneralModel();
		vias = generalModel.listarVia();
	}

	public void cargarProvincias(){
		
		if (dirCienteFins!=null){
			
			GeneralModel generalModel = new GeneralModel();
			
			if (dirCienteFins.getCOD_DEP()!=null && dirCienteFins.getCOD_DEP()<1){
				int codigoDep = dirCienteFins.getCOD_DEP();
				provincias = generalModel.listarPrvi(codigoDep);
			} else {
				provincias = generalModel.listarPrvi(dirCienteFins.getCOD_DEP());
			}
			
		}
		
	}	
	
	public void cargarDistritos(){
		
		if (dirCienteFins!=null){
			if (dirCienteFins.getCOD_PRVI()!=null){
				GeneralModel generalModel = new GeneralModel();
				int codigoDep = dirCienteFins.getCOD_DEP();
				int codigoPrvi = dirCienteFins.getCOD_PRVI();
				distritos = generalModel.listarDist(codigoDep,codigoPrvi);
			}
		}
	}
	
	
	public void cargarTipoDocumento(){
		GeneralModel generalModel = new GeneralModel();
		tipoDocIdent = generalModel.listarTipoDocu(1); 
	}
	
	public void cargarCodigoIntDir(){
		GeneralModel generalModel = new GeneralModel();
		codigoIntDir = generalModel.listarCodigoIntDir();
	}
	
	public void buscar(){
		ManClienteFinModel clienteFinModel= new ManClienteFinModel();
		
		try {
			
			if (COD_TIP_DOC_IDE!=null || NUM_DOC_IDE!=null || NOM_RAZ_SOC!= null || NOMBRE_COMPLETO!= null){
				
				ClienteFinBean bean= new ClienteFinBean();
				
				bean.setCOD_TIP_DOC_IDE(COD_TIP_DOC_IDE);
				bean.setNUM_DOC_IDE(NUM_DOC_IDE.length()==0?null:"%"+NUM_DOC_IDE+"%");
				bean.setNOM_RAZ_SOC(NOM_RAZ_SOC.length()==0?null:"%"+NOM_RAZ_SOC.toLowerCase()+"%");
				bean.setNombreCompleto(NOMBRE_COMPLETO.length()==0?null:"%"+NOMBRE_COMPLETO.toLowerCase()+"%");
			
				listClienteFins = clienteFinModel.listarClienteFin(bean);
				totalRegistros = listClienteFins.size();
				
				System.out.println("salida "+totalRegistros);
			}else{
				listClienteFins = clienteFinModel.listarClienteFin();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	public String verDetalle(){	
		ManDireccionClienteFinModel clienteFinModel= new ManDireccionClienteFinModel();
		try {
			if (IDE_CLI!=null && Integer.parseInt(IDE_CLI)!=0){
				clienteFins.setListDirCliFin(clienteFinModel.listarDireccionClienteFin(Integer.parseInt(IDE_CLI)));
										
			}
			edit = false;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return Constant.EDIT_NO_CLIENTE_FIN;
	}
	
	public void verDetalleDir(){		
		ManDireccionClienteNoRegModel clienteNoRegModel= new ManDireccionClienteNoRegModel();
		try {
			
			if (SEC_DIR!=null){
				
				direccionCliNoRegBean = clienteNoRegModel.buscarIdDireccionClienteNoReg(SEC_DIR);
				if (direccionCliNoRegBean!=null){
					
					if(direccionCliNoRegBean.getFLG_DIR_PPL()!=null
							&& !"".equals(direccionCliNoRegBean.getFLG_DIR_PPL()) ){
						direccionCliNoRegBean.setFlagDireccion(
						"S".equalsIgnoreCase(direccionCliNoRegBean.getFLG_DIR_PPL())?true:false);
					}else{
						direccionCliNoRegBean.setFlagDireccion(false);
					}
				}
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
			
	/*GET- SET*/
	
	public ArrayList<ClienteFinBean> getListClienteFins() {
		if (listClienteFins!=null){
			if (!listClienteFins.isEmpty()){
				totalRegistros = listClienteFins.size();			
			}else{
				totalRegistros = 0;
			}
		}else{
			totalRegistros = 0;
		}
		return listClienteFins;
	}
	public void setListClienteFins(ArrayList<ClienteFinBean> listClienteFins) {
		this.listClienteFins = listClienteFins;
	}
	public ClienteFinBean getClienteFins() {		
		return clienteFins;
	}
	public void setClienteFins(ClienteFinBean clienteFins) {
		this.clienteFins = clienteFins;
	}

	public Map<String, String> getDepartamentos() {
		return departamentos;
	}

	public void setDepartamentos(Map<String, String> departamentos) {
		this.departamentos = departamentos;
	}

	public Map<String, String> getProvincias() {
		return provincias;
	}

	public void setProvincias(Map<String, String> provincias) {
		this.provincias = provincias;
	}

	public Map<String, String> getDistritos() {
		return distritos;
	}

	public void setDistritos(Map<String, String> distritos) {
		this.distritos = distritos;
	}

	public DireccionClienteFinBean getDirCienteFins() {
		return dirCienteFins;
	}

	public void setDirCienteFins(DireccionClienteFinBean dirCienteFins) {
		this.dirCienteFins = dirCienteFins;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public Map<String, String> getTipoDocIdent() {
		cargarTipoDocumento();
		return tipoDocIdent;
	}

	public void setTipoDocIdent(Map<String, String> tipoDocIdent) {
		this.tipoDocIdent = tipoDocIdent;
	}

	public Boolean getFlagDireccion() {
		return flagDireccion;
	}

	public void setFlagDireccion(Boolean flagDireccion) {
		this.flagDireccion = flagDireccion;
	}

	public String getIDE_CLI() {
		return IDE_CLI;
	}

	public void setIDE_CLI(String iDE_CLI) {
		IDE_CLI = iDE_CLI;
	}

	public Integer getSEC_DIR() {
		return SEC_DIR;
	}

	public void setSEC_DIR(Integer sEC_DIR) {
		SEC_DIR = sEC_DIR;
	}

	public Map<String, String> getVias() {
		return vias;
	}

	public void setVias(Map<String, String> vias) {
		this.vias = vias;
	}

	public Integer getCOD_TIP_DOC_IDE() {
		return COD_TIP_DOC_IDE;
	}

	public void setCOD_TIP_DOC_IDE(Integer cOD_TIP_DOC_IDE) {
		COD_TIP_DOC_IDE = cOD_TIP_DOC_IDE;
	}

	public String getNUM_DOC_IDE() {
		return NUM_DOC_IDE;
	}

	public void setNUM_DOC_IDE(String nUM_DOC_IDE) {
		NUM_DOC_IDE = nUM_DOC_IDE;
	}

	public String getNOM_RAZ_SOC() {
		return NOM_RAZ_SOC;
	}

	public void setNOM_RAZ_SOC(String nOM_RAZ_SOC) {
		NOM_RAZ_SOC = nOM_RAZ_SOC;
	}
	
	public String getNOMBRE_COMPLETO() {
		return NOMBRE_COMPLETO;
	}

	public void setNOMBRE_COMPLETO(String nOMBRE_COMPLETO) {
		NOMBRE_COMPLETO = nOMBRE_COMPLETO;
	}

	public Integer getTotalRegistros() {
		return totalRegistros;
	}

	public void setTotalRegistros(Integer totalRegistros) {
		this.totalRegistros = totalRegistros;
	}

	public Boolean getVisibleDialog() {
		return visibleDialog;
	}

	public void setVisibleDialog(Boolean visibleDialog) {
		this.visibleDialog = visibleDialog;
	}

	public ManDireccionClienteFinModel getDireccionClienteFinModel() {
		return direccionClienteFinModel;
	}

	public void setDireccionClienteFinModel(
			ManDireccionClienteFinModel direccionClienteFinModel) {
		this.direccionClienteFinModel = direccionClienteFinModel;
	}

	public Map<String, String> getCodigoIntDir() {
		return codigoIntDir;
	}

	public void setCodigoIntDir(Map<String, String> codigoIntDir) {
		this.codigoIntDir = codigoIntDir;
	}

	public DireccionClienteNoRegBean getDireccionCliNoRegBean() {
		return direccionCliNoRegBean;
	}

	public void setDireccionCliNoRegBean(
			DireccionClienteNoRegBean direccionCliNoRegBean) {
		this.direccionCliNoRegBean = direccionCliNoRegBean;
	}

	public String getPopUp() {
		return popUp;
	}

	public void setPopUp(String popUp) {
		this.popUp = popUp;
	}

	public Boolean getEdit() {
		return edit;
	}

	public void setEdit(Boolean edit) {
		this.edit = edit;
	}
	
	
}
